--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / tests / backend / landlock_integration_support.py
Displaying Raw • Download
tests/backend/landlock_integration_support.py master (b89dc9e6) Text, 2.51 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Helpers for Landlock integration probes (always run in a subprocess)."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787os
Tff7b72import T7ee787subprocess
Tff7b72import T7ee787sys
Tff7b72import T7ee787textwrap
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Tff7b72import T7ee787pytest
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787landlock_sandbox Tff7b72import Te6edf3landlock_kernel_supported
Te6edf3REPO_ROOT Tff7b72= Te6edf3PathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparentsTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3APPLY_FAILED_MARKER Tff7b72= Ta5d6ff"Ta5d6ffAPPLY_FAILEDTa5d6ff"
Tff7b72def Td2a8fflandlock_integration_availableTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72return Te6edf3sysTff7b72.Td2a8ffplatform Tff7b72== Ta5d6ff"Ta5d6fflinuxTa5d6ff" Tff7b72and Te6edf3landlock_kernel_supportedTb4b4b4(Tb4b4b4)
Te6edf3requires_landlock_integration Tff7b72= Te6edf3pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffskipifTb4b4b4(
Tff7b72not Te6edf3landlock_integration_availableTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3reasonTff7b72=Ta5d6ff"Ta5d6ffLandlock apply requires a supported Linux kernelTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffrun_python_under_landlockTb4b4b4(
Te6edf3bodyTb4b4b4: Tffa657strTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3storageTb4b4b4: Tffa657str Tff7b72| Te6edf3PathTb4b4b4,
Te6edf3reticulum_config_dirTb4b4b4: Tffa657str Tff7b72| Te6edf3Path Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3extra_envTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3timeoutTb4b4b4: Tffa657float Tff7b72= T79c0ff90Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Te6edf3subprocessTff7b72.Td2a8ffCompletedProcessTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
T8b949e"""Execute body in a fresh Python process after apply_landlock_sandbox."""
Te6edf3storage_s Tff7b72= Tffa657strTb4b4b4(Te6edf3storageTb4b4b4)
Te6edf3rns_s Tff7b72= Tffa657strTb4b4b4(Te6edf3reticulum_config_dirTb4b4b4) Tff7b72if Te6edf3reticulum_config_dir Tff7b72is Tff7b72not Tff7b72None Tff7b72else Tff7b72None
Te6edf3rns_kw Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff, reticulum_config_dir=Tffd700{Te6edf3rns_sTffd700!r}Ta5d6ff" Tff7b72if Te6edf3rns_s Tff7b72is Tff7b72not Tff7b72None Tff7b72else Ta5d6ff"Ta5d6ff"
Te6edf3body_clean Tff7b72= Te6edf3textwrapTff7b72.Td2a8ffdedentTb4b4b4(Te6edf3bodyTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3script Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffimport osTffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ffimport sysTffea00\nTa5d6ff"
Ta5d6ff'Ta5d6ffos.environ[Ta5d6ff"Ta5d6ffMESHCHAT_LANDLOCKTa5d6ff"Ta5d6ff] = Ta5d6ff"Ta5d6ff1Ta5d6ff"Tffea00\nTa5d6ff'
Ta5d6ff"Ta5d6fffrom meshchatx.src.backend.landlock_sandbox import apply_landlock_sandboxTffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffstorage = Tffd700{Te6edf3storage_sTffd700!r}Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ffok = apply_landlock_sandbox(Tffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ff storage_dir=storage,Tffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ff log_dir=storageTffd700{Te6edf3rns_kwTffd700}Ta5d6ff,Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ff)Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ffif not ok:Tffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ff print(Tffd700{Te6edf3APPLY_FAILED_MARKERTffd700!r}Ta5d6ff)Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ff sys.exit(2)Tffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Tffd700{Te6edf3body_cleanTffd700}Tffea00\nTa5d6ff"
Tb4b4b4)
Te6edf3env Tff7b72= Tb4b4b4{Tff7b72*Tff7b72*Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4, Tff7b72*Tff7b72*Tb4b4b4(Te6edf3extra_env Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4}
Tff7b72return Te6edf3subprocessTff7b72.Td2a8ffrunTb4b4b4(
Tb4b4b4[Te6edf3sysTff7b72.Td2a8ffexecutableTb4b4b4, Ta5d6ff"Ta5d6ff-cTa5d6ff"Tb4b4b4, Te6edf3scriptTb4b4b4]Tb4b4b4,
Te6edf3cwdTff7b72=Tffa657strTb4b4b4(Te6edf3REPO_ROOTTb4b4b4)Tb4b4b4,
Te6edf3capture_outputTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3textTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3timeoutTb4b4b4,
Te6edf3checkTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3envTff7b72=Te6edf3envTb4b4b4,
Te6edf3stdinTff7b72=Te6edf3subprocessTff7b72.Td2a8ffDEVNULLTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffskip_if_landlock_not_appliedTb4b4b4(Te6edf3resultTb4b4b4: Te6edf3subprocessTff7b72.Td2a8ffCompletedProcessTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3APPLY_FAILED_MARKER Tff7b72in Tb4b4b4(Te6edf3resultTff7b72.Td2a8ffstdout Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3pytestTff7b72.Td2a8ffskipTb4b4b4(Ta5d6ff"Ta5d6ffLandlock could not be applied in this environmentTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffassert_probe_okTb4b4b4(
Te6edf3resultTb4b4b4: Te6edf3subprocessTff7b72.Td2a8ffCompletedProcessTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3ok_markerTb4b4b4: Tffa657str Tff7b72= Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3skip_if_landlock_not_appliedTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72assert Te6edf3resultTff7b72.Td2a8ffreturncode Tff7b72== T79c0ff0Tb4b4b4, Tb4b4b4(Te6edf3resultTff7b72.Td2a8ffstdoutTb4b4b4, Te6edf3resultTff7b72.Td2a8ffstderrTb4b4b4)
Tff7b72assert Te6edf3ok_marker Tff7b72in Tb4b4b4(Te6edf3resultTff7b72.Td2a8ffstdout Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────